package com.atguigu.ssyx.acl.utils;

import com.atguigu.ssyx.model.acl.Permission;

import java.util.ArrayList;
import java.util.List;

public class PermissionHelper {
    public static List<Permission> buildPermission(List<Permission> allPermissionList) {
//        创建最终数据封装list集合
        List<Permission> trees = new ArrayList<>();
//         遍历所有菜单list集合,得到第一层数据,pid=0
        for (Permission permission : allPermissionList) {
//            判断PID是否为0就是第一层的数据
            if (permission.getPid() == 0) {
                permission.setLevel(1);
//                调用方法,从第一层开始
                trees.add(findChild(permission, allPermissionList));
            }
        }
        return trees;
    }

    //    递归往下找,找子节点
//    permission上层节点,从这里网上找
//    allList所有菜单
    private static Permission findChild(Permission permission, List<Permission> allPermissionList) {
        permission.setChildren(new ArrayList<Permission>());
//        遍历Alllist所有菜单数据
//        判断:当前节点id=pid是否一样,封装,递归乡下找
        for (Permission it : allPermissionList) {
            if (permission.getId() == it.getPid()) {
                int level = permission.getLevel()+1;
                it.setLevel(level);
//                封装下一次层的数据
                permission.getChildren().add(findChild(it,allPermissionList));
            }
        }
        return permission;
    }
}
